import axios from 'axios';
import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';


// 创建axios实例
const service: AxiosInstance = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API || '/api', // 从环境变量获取基础URL
  timeout: 50000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  }
})

// 请求拦截器
interface RequestInstance {
  (config: AxiosRequestConfig): Promise<any>
}

const request: RequestInstance = async (config) => {
  // 在发送请求之前做些什么
  // 例如：添加token、请求时间戳等
  const token = localStorage.getItem('token')
  if (token) {
    config.headers = config.headers || {}
    config.headers['Authorization'] = `Bearer ${token}`
  }

  return config
}

// 请求错误处理
const requestError = (error: any) => {
  console.error('请求出错:', error)
  return Promise.reject(error)
}

// 响应拦截器
const response = (response: AxiosResponse) => {
  const res = response.data

  // 假设后端返回统一格式：{ code: number, message: string, data: any }
  if (res.code !== 200) {
    // 处理错误状态码
    console.error('响应错误:', res.message || '未知错误')

    // 例如：token过期处理
    if (res.code === 401) {
      // 清除token并跳转到登录页
      localStorage.removeItem('token')
      window.location.href = '/login'
    }

    return Promise.reject(new Error(res.message || '未知错误'))
  }

  return res.data // 返回实际数据部分
}

// 响应错误处理
const responseError = (error: any) => {
  // 对响应错误做点什么
  console.error('网络请求错误:', error.message)

  // 处理网络错误
  if (error.code === 'ECONNABORTED') {
    console.error('请求超时，请检查网络连接')
  }

  return Promise.reject(error)
}

// 应用拦截器
service.interceptors.request.use(request, requestError)
service.interceptors.response.use(response, responseError)

// 导出axios实例
export default service